perm filename GDPY[G,BGB] blob sn#053588 filedate 1973-07-14 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00007 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00002 00002	SUBR(IIIDPY,WINDOW,GLASS)	Display device routine.		*
 00004 00003	SUBR(YDPY,NODE)
 00007 00004	SUBR(VDPY,VERTEX)	SPECIAL VERTEX DISPLAY			*
 00008 00005	SUBR(EDPY,EDGE)		SPECIAL EDGE DISPLAY			*
 00009 00006	SUBR(FDPY,FACE)			Special Face display		*
 00011 00007	SUBR(IDPY,NODE)			Identifier display.		*
 00013 ENDMK
⊗;
SUBR(IIIDPY,WINDOW,GLASS)	;Display device routine.		*
	E←←16

;DISPLAY WINDOW FRAME.
	LAC 1,WINDOW
	NIP 1(1)↔DAC XL			;PICK UP 2D CLIPPER WINDOW
	NAP 1(1)↔DAC XH
	NIP 2(1)↔DAC YL
	NAP 2(1)↔DAC YH
	CALL(DPYSET,DPYBUF)		;NEW POG
	CALL(AIVECT,XL,YL)		;MAKE A BOARDER
	CALL(AVECT,XH,YL)
	CALL(AVECT,XH,YH)
	CALL(AVECT,XL,YH)
	CALL(AVECT,XL,YL)

;DISPLAY THE VISIBLE EDGE LIST.
	LAC E,WINDOW
	NCAMR E,E↔PWRLD E,E		;GET THE WORLD.
	JUMPE E,L3			;NOTHING THERE, RETURN
	PED E,E↔SKIPA			;FIRST EDGE OF WORLD.
L1:	ALT2 E,E↔JUMPE E,L3		;GET AN EDGE.
	X1DC 1,E↔Y1DC 2,E
	CALL(AIVECT,1,2)
	X2DC 1,E↔Y2DC 2,E
	CALL(AVECT,1,2)
	PVT 1,E↔CALL(YDPY,1)		;CHECK EACH VERTEX FOR YNODES
L2:	NVT 1,E↔CALL(YDPY,1)
	GO L1
L3:	CALL(DPYOUT,GLASS)
	POP2J

BEND IIIDPY; BGB 5 FEB 1973 --------------------------------------
	DECLARE{XL,XH,YL,YH,TX,TY}
SUBR(YDPY,NODE)
	T←15
	SIZ←14

	LAC 1,NODE
	TESTZ 1,NSEW+TBIT1	;IF INVISIBLE, THEN SKIP THIS ONE
	POP1J
	PY T,1			;GET TJOINT OR TEXT OF VERTEX
	JUMPE T,POP1J.		;NOTHING THERE
	DAC T,NODE
	LAC 0,(T)
	ANDI 0,17
	CAIE 0,$YNODE↔POP1J	;IF IT'S A TJOINT, LEAVE
	MARK 1,TBIT1		;REMEMBER WE'VE BEEN HERE
	GO YDPY1

YDPY2:	LAC T,NODE↔PY T,T
	JUMPE T,POP1J.
YDPY1:	DAC T,NODE↔YCODE 1,T
	CAIN 1,$TEXTHD↔GO DPYTXT
;	CAIN 1,$ARROW↔GO[CALL(DPYARW,T)↔GO YDPY2]
	FATAL(ILLEGAL YNODE FOUND)
DPYTXT:
	CALL(DPYBRT,[1])
	XDC 0,T↔FIXX 0,		;FETCH CO-ORDINATES
	DAC 0,TX
	YDC 0,T↔FIXX 0,
	DAC 0,TY
	DPSIZ SIZ,T
	PTEXT T,T
	SKIPN SIZ↔LACI SIZ,1
	CALL(DPYBIG,SIZ)
	LAC 0,TY
DPYTX2:	CAMGE 0,YH		;MAKE SURE IT'S WITHIN WINDOW
	CAMGE 0,YL
	GO DPYTX3
	CALL AIVECT,TX,TY	;POSITION IT
DPYTX4:	MOVEI 0,1(T)
	CALL DPYSTR,0		;DISPLAY IT (THIS MAY OVERFLOW EAST)
	TESTZ T,CONBIT		;IS IT CONTINUED?
	GO [ TCCW  T,T		;YES, GET NEXT LINE
	     JUMPN T,DPYTX4	;MAKE SURE THERE'S SOMETHING THERE
	     FATAL<Missing continuation of text node.> ]
DPYTX3:	TCCW T,T		;GET NEXT TEXT NODE
	JUMPE T,YDPY2		;END OF LINE
;	HRREI 0,-20		;THIS REALLY SHOULD BE SIZE DEPENDENT
	HRRZ 0,CHRSIZ(SIZ)
	MOVN
	ADDB 0,TY		;INCREMENT 
	GO DPYTX2
ENDR YDPY;-----------------------------------------------------------

CHRSIZ:	20		;0 (SAME AS 2)
	20		;1
	30		;2
	34		;3
	40		;4
	60		;5
	100		;6
	140		;7
SUBR(VDPY,VERTEX)	;SPECIAL VERTEX DISPLAY			*
	LAC 1,VERTEX
	TESTZ 1,NSEW+PZZ↔POP1J
	XDC 0,1↔FIXX↔SUBI VERNX↔PUSH P,0
	YDC 0,1↔FIXX↔SUBI VERNY↔PUSH P,0↔PUSHJ P,AIVECT
	CALL(DPYBIG,[1])↔CALL(DPYBRT,[3])
	CALL(IDPY,VERTEX)
	CALL(DPYBIG,[2])↔CALL(DPYBRT,[2])
	POP1J
ENDR VDPY;9-JAN-73(BGB)9-FEB-73(BGB)
SUBR(EDPY,EDGE)		;SPECIAL EDGE DISPLAY			*
	CALL(DPYBIG,[1])↔CALL(DPYBRT,[3])
	LAC 2,EDGE
	PVT 1,2
	TESTZ 1,NSEW!PZZ↔GO L1
	XDC 0,1↔FIXX↔DAC X
	YDC 0,1↔FIXX↔DAC Y
	CALL AIVECT,X,Y
	CALL (DTYO,["+"])
	CALL AIVECT,X,Y
L1:	LAC 2,EDGE
	NVT 1,2
	TESTZ 1,NSEW!PZZ↔GO L2
	XDC 0,1↔FIXX↔ADDM X↔PUSH P,0
	YDC 0,1↔FIXX↔ADDM Y↔PUSH P,0
	CALL AVECT
	CALL (DTYO,["-"])
L2:	LAC 2,EDGE
	LAC X↔ASH -1↔PUSH P,0
	LAC Y↔ASH -1↔PUSH P,0
	CALL AIVECT
	CALL IDPY,EDGE
	CALL (DPYBIG,[2])
	CALL (DPYBRT,[2])
	POP1J
DECLARE{X,Y}
ENDR EDPY;9-FEB-73(BGB),9-FEB-73(BGB)
SUBR(FDPY,FACE)			;Special Face display		*
	EXTERN ECCW
	LAC 1,FACE↔DAC 1,F
	TEST 1,FBIT↔POP1J
	PED 2,1↔DAC 2,E↔DAC 2,E0
	SETZM I
	CALL(DPYBIG,[1])
	CALL(DPYBRT,[3])
	SKIPN E↔GO[LAC 1,F↔PFACE 1,1↔PVT 1,1↔GO VDPY+1]
L1:	AOS I↔LAC 2,E↔TEST 2,VISIBLE↔GO L2
	X1DC 0,2↔DAC 0,X
	Y1DC 1,2↔DAC 1,Y
	CALL(AIVECT,0,1)↔LAC 2,E
	X2DC 0,2↔ADDM 0,X
	Y2DC 1,2↔ADDM 1,Y
	CALL(AVECT,0,1)
	LAC 0,X↔ASH 0,-1↔SUBI 0,VERNX
	LAC 1,Y↔ASH 1,-1↔SUBI 1,VERNY
	CALL(AIVECT,0,1)
	CALL(DECDPY,I)
L2:	CALL(ECCW,E,F)
	CAMN 1,E↔GO L3↔DAC 1,E
	CAME 1,E0↔GO L1
L3:	CALL(DPYBRT,[2])
	CALL(DPYBIG,[2])
	POP1J
	DECLARE{F,E,E0,X,Y,I}
ENDR FDPY;9-FEB-73(BGB)
SUBR(IDPY,NODE)			;Identifier display.		*
;--------------------------------------------------------------------
	EXTERN CAMERA,NTYPE,NNAMES
	CALL(NTYPE,NODE)↔CAIGE 1,$BODY↔GO L5
	LAC 1,NODE↔SETZ 2,
	TESTZ 1,BBIT↔GO[
		SKIPE 13,-2(1)↔GO[
		LAC 14,-1(1)↔DZM 15
		CALL(DPYSTR,[13])↔POP1J]
	L1:	CW 1,1↔TESTZ 1,BBIT↔AOJA 2,L1
		AOS 2↔PUSH P,2↔CALL(DTYO,["B"])
		CALL(DECDPY)↔POP1J]
	TESTZ 1,FBIT↔GO[
	L2:	NFACE 1,1↔TESTZ 1,FBIT↔AOJA 2,L2
		AOS 2↔PUSH P,2↔CALL(DTYO,["F"])
		CALL(DECDPY)↔POP1J]
	TESTZ 1,EBIT↔GO[
	L3:	NED 1,1↔TESTZ 1,EBIT↔AOJA 2,L3
		AOS 2↔PUSH P,2↔CALL(DTYO,["E"])
		CALL(DECDPY)↔POP1J]
	TESTZ 1,VBIT↔GO[
	L4:	NVT 1,1↔TESTZ 1,VBIT↔AOJA 2,L4
		AOS 2↔PUSH P,2↔CALL(DTYO,["V"])
		CALL(DECDPY)↔POP1J]
	CALL NTYPE,NODE
L5:	CALL DPYSTR,NNAMES(1)

	LAC 1,NODE↔CAMN 1,UNIVERSE↔POP1J
	$TYPE 2,1↔DZM 5			    ;NODE - TYPE - COUNT.
	LAC 3,UNIVERSE↔SON 3,3↔DAC 3,4		;SON0 - SON.
	CAME 1,4↔GO[$TYPE 0,4↔CAMN 0,2↔AOS 5↔SIS 4,4
		CAME 3,4↔GO .-1↔GO .+1]↔AOS 5
	CALL(DECDPY,5)
	POP1J
ENDR IDPY;2/4/73(BGB)------------------------------------------------
END